package service

import (
	"gitee.com/tools/internal/domain"
	"gitee.com/tools/internal/service/document"
)

type FormatService struct {
	doc document.Document
}

func NewFormatService(doc document.Document) *FormatService {
	return &FormatService{
		doc: doc,
	}
}

// PdfToWordReq todo 需要再次重构
func (f *FormatService) PdfToWordReq(filename string) (domain.RequestData, error) {
	return f.doc.ConvertPdfToWord(filename)
}

func (f *FormatService) GetConvertResult(id string) (domain.File, error) {
	return f.doc.GetConvertResult(id)
}

func (f *FormatService) PdfToImage(filename string) (domain.RequestData, error) {
	return f.doc.ConvertPdfToImage(filename)
}

func (f *FormatService) ImageToWord(imageType string, filenames ...string) (domain.RequestData, error) {
	return f.doc.ConvertImageToWord(imageType, filenames...)
}
func (f *FormatService) ImageToPdf(imageType string, filenames ...string) (domain.RequestData, error) {
	return f.doc.ConvertImageToPdf(imageType, filenames...)
}
func (f *FormatService) ImageToExcel(imageType string, filenames ...string) (domain.RequestData, error) {
	return f.doc.ConvertImageToExcel(imageType, filenames...)
}

//func (f *FormatService) getPageCount(filePath string) (int, error) {
//	pdfbytes, err := os.ReadFile(filePath)
//	if err != nil {
//		return 0, err
//	}
//	doc, err := renderer.Instance.OpenDocument(&requests.OpenDocument{File: &pdfbytes})
//	if err != nil {
//		return 0, err
//	}
//	defer renderer.Instance.FPDF_CloseDocument(&requests.FPDF_CloseDocument{Document: doc.Document})
//
//	pageCount, err := renderer.Instance.FPDF_GetPageCount(&requests.FPDF_GetPageCount{
//		Document: doc.Document,
//	})
//	if err != nil {
//		return 0, err
//	}
//	return pageCount.PageCount, nil
//}
//
//func (f *FormatService) renderPage(filepath string, page int, outfile, id string) error {
//	// 读取pdf中的内容
//	pdfbytes, err := os.ReadFile(filepath)
//	if err != nil {
//		log.Println("读取pdf文件内容失败")
//		return err
//	}
//	//用pdfium 打开pdf并申请一个worker
//	doc, err := renderer.Instance.OpenDocument(&requests.OpenDocument{File: &pdfbytes})
//	if err != nil {
//		log.Println("用pdfium打开pdf失败")
//		return err
//	}
//	// 关闭文件句柄
//	defer renderer.Instance.FPDF_CloseDocument(&requests.FPDF_CloseDocument{
//		Document: doc.Document,
//	})
//
//	pageRender, err := renderer.Instance.RenderPageInDPI(&requests.RenderPageInDPI{
//		DPI: 200,
//		Page: requests.Page{
//			ByIndex: &requests.PageByIndex{
//				Document: doc.Document,
//				Index:    page,
//			},
//		},
//	})
//	if err != nil {
//		return err
//	}
//	pwd, err := os.Getwd()
//	if err != nil {
//		return err
//	}
//	generateDir := filepath2.Join(pwd, "pdfpng")
//	err = os.Mkdir(generateDir, os.ModePerm)
//	if err != nil {
//		return err
//	}
//	filename := filepath2.Join(generateDir, id, outfile)
//	file, err := os.Create(filename)
//	if err != nil {
//		return err
//	}
//	defer file.Close()
//	err = png.Encode(file, pageRender.Result.Image)
//	if err != nil {
//		return err
//	}
//	return nil
//}

//func PtrToVal[T any](ptr T) domain.File {
//	var file = domain.File{
//		Status: ptr
//	}
//
//}
